package CONTABILIDAD_MODELO;

import Conexion.Conexion;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class CON_MONEDA{
    private double ID;
    private String DESCRIPCION;
    private String ACRONIMO;
    private double TIPO_DE_CAMBIO_VENTA;
    private double TIPO_DE_CAMBIO_COMPRA;
    private double TIPO_DE_CAMBIO;
    private double MONEDA_BASE;
    
    private Conexion con = null;
    
    public CON_MONEDA(){}
    
    public CON_MONEDA(double TIPO_DE_CAMBIO,double TIPO_DE_CAMBIO_COMPRA,double TIPO_DE_CAMBIO_VENTA,String ACRONIMO,String DESCRIPCION,double ID){
        this.TIPO_DE_CAMBIO =TIPO_DE_CAMBIO;
        this.TIPO_DE_CAMBIO_COMPRA =TIPO_DE_CAMBIO_COMPRA;
        this.TIPO_DE_CAMBIO_VENTA =TIPO_DE_CAMBIO_VENTA;
        this.ACRONIMO =ACRONIMO;
        this.DESCRIPCION =DESCRIPCION;
        this.ID =ID;
    }
    public CON_MONEDA(double TIPO_DE_CAMBIO,String ACRONIMO,String DESCRIPCION,double ID){
        this.TIPO_DE_CAMBIO =TIPO_DE_CAMBIO;
        this.ACRONIMO =ACRONIMO;
        this.DESCRIPCION =DESCRIPCION;
        this.ID =ID;
    }
    
    public CON_MONEDA BuscarXAcronimo(String acronimo){
		try{String consulta = "select * from BROKER.CON_MONEDA where UPPER(ACRONIMO) like( UPPER('"+acronimo+"'))";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs).get(0);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
    }
    public CON_MONEDA BuscarXAcronimo_FECHA_CIERRA(String acronimo, double fecha_cierre){
		try{String consulta = "SELECT CON_TC_CIERRE.*, CON_MONEDA.*\n" +
                                "  FROM BROKER.CON_TC_CIERRE, BROKER.CON_MONEDA\n" +
                                " WHERE     (CON_TC_CIERRE.ID_MONEDA = CON_MONEDA.ID)\n" +
                                "       AND (CON_MONEDA.ACRONIMO = '"+acronimo+"')\n" +
                                "       AND (CON_TC_CIERRE.ID_FECHA = "+fecha_cierre+")";
			ResultSet rs = con.EjecutarConsulta(consulta);
			return Cargar(rs).get(0);}
		catch(Exception e){
			e.printStackTrace();}
			return null;
    }
    public Double Buscar_Inflacionaria_Mes_Pasado(int mes, int ano) throws SQLException{
        String consulta = "SELECT CON_TC_CIERRE.MONTO\n" +
                        "  FROM BROKER.CON_MONEDA, BROKER.CON_FECHA_CIERRE, BROKER.CON_TC_CIERRE\n" +
                        " WHERE     (CON_TC_CIERRE.ID_MONEDA = CON_MONEDA.ID)\n" +
                        "       AND (CON_TC_CIERRE.ID_FECHA = CON_FECHA_CIERRE.ID)\n" +
                        "       AND (CON_MONEDA.MONEDA_BASE = 2)\n" +
                        "       AND (CON_FECHA_CIERRE.ANO = "+ano+")\n" +
                        "       AND (CON_FECHA_CIERRE.MES = "+mes+") ";
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getDouble("MONTO");
        else
            return 0.0;
    }
    public Double Buscar_Inflacionaria_actual() throws SQLException{
        String consulta = "SELECT CON_MONEDA.TIPO_DE_CAMBIO\n" +
                        "  FROM BROKER.CON_MONEDA\n" +
                        " WHERE (CON_MONEDA.MONEDA_BASE = 2)";
        ResultSet rs = con.EjecutarConsulta(consulta);
        if(rs.next())
            return rs.getDouble("TIPO_DE_CAMBIO");
        else
            return 0.0;
    }
    
    public boolean Insertar() throws Exception{
            String consulta = "insert into BROKER.CON_MONEDA(TIPO_DE_CAMBIO,TIPO_DE_CAMBIO_COMPRA,TIPO_DE_CAMBIO_VENTA,ACRONIMO,DESCRIPCION,ID) VALUES ("+TIPO_DE_CAMBIO+","+TIPO_DE_CAMBIO_COMPRA+","+TIPO_DE_CAMBIO_VENTA+",'"+ACRONIMO+"','"+DESCRIPCION+"',"+ID+")";
            con.EjecutarSentencia(consulta);
            return true;
    }
    public boolean update() throws Exception{
            String consulta = "update BROKER.CON_MONEDA set MONEDA_BASE="+MONEDA_BASE+",TIPO_DE_CAMBIO="+TIPO_DE_CAMBIO+",TIPO_DE_CAMBIO_COMPRA="+TIPO_DE_CAMBIO_COMPRA+",TIPO_DE_CAMBIO_VENTA="+TIPO_DE_CAMBIO_VENTA+" where ID="+ID;
            con.EjecutarSentencia(consulta);
            return true;
    }
    public boolean update(Date fecha) throws Exception{
            SimpleDateFormat forma=new SimpleDateFormat("dd/MM/yyyy");
            String consulta = "update BROKER.CON_MONEDA set  FECHA_TIPO_CAMBIO=to_date('"+forma.format(fecha)+"','dd/MM/yyyy'), MONEDA_BASE="+MONEDA_BASE+",TIPO_DE_CAMBIO="+TIPO_DE_CAMBIO+",TIPO_DE_CAMBIO_COMPRA="+TIPO_DE_CAMBIO_COMPRA+",TIPO_DE_CAMBIO_VENTA="+TIPO_DE_CAMBIO_VENTA+" where ID="+ID;
            con.EjecutarSentencia(consulta);
            return true;
    }
    
    public boolean MonedaBase(double id) throws SQLException{      
        String consulta = "update BROKER.CON_MONEDA set MONEDA_BASE= 0 where ID="+id;
        con.EjecutarSentencia(consulta);
        return true;        
    }
    
    public double IdMonedaInflacionaria() throws SQLException{      
        String consulta = "select * from BROKER.CON_MONEDA where MONEDA_BASE= 2";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getDouble("ID");        
    }
    
    
    public boolean EliminarXid(){
        try{
            String consulta = "delete from BROKER.CON_MONEDA where ID = "+getID();
            con.EjecutarSentencia(consulta);
            return true;
        }
        catch(Exception e){
            e.printStackTrace();
            return false;
        }
    }
    
    public CON_MONEDA BuscarXid(double id){
        try{String consulta = "select * from BROKER.CON_MONEDA where ID = "+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs).get(0);}
        catch(Exception e){
            e.printStackTrace();}
        return null;
    }
    
    public CON_MONEDA getMonedaBase(int tipo) throws SQLException{
        String consulta = "select * from BROKER.CON_MONEDA where MONEDA_BASE="+tipo;
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs).get(0);
        
    }
    
    public List<CON_MONEDA> Todos(){
        try{String consulta = "select * from BROKER.CON_MONEDA";
        ResultSet rs = con.EjecutarConsulta(consulta);
        return Cargar(rs);}
        catch(Exception e){
            e.printStackTrace();}
        return null;
    }
    
    public String TodosJson(){
        try{String consulta = "select * from BROKER.CON_MONEDA ORDER BY CON_MONEDA.ID ASC";
        ResultSet rs = con.EjecutarConsulta(consulta);
        String json="";
        while(rs.next())
        {
            if(rs.getDouble("MONEDA_BASE")==0)continue;
            if(rs.getDouble("MONEDA_BASE")== 1){
                json+="{\"CODIGO\":\""+rs.getString("ID")+"\", \"ACRONIMO\":\""+rs.getString("ACRONIMO")+"\", \"TPCAMBIO\":\""+rs.getDouble("TIPO_DE_CAMBIO_VENTA")+"\"},";
            }else{
                json+="{\"CODIGO\":\""+rs.getString("ID")+"\", \"ACRONIMO\":\""+rs.getString("ACRONIMO")+"\", \"TPCAMBIO\":\""+rs.getDouble("TIPO_DE_CAMBIO")+"\"},";
            }
        }
        return json;
        }
        catch(Exception e){
            e.printStackTrace();}
        return null;
    }
    
    public List<CON_MONEDA> Cargar(ResultSet rs){
        try{
            List<CON_MONEDA> lista = new ArrayList<CON_MONEDA>();
            while(rs.next()){
                CON_MONEDA objeto = new CON_MONEDA();
                
                objeto.setID(rs.getDouble("ID"));
                objeto.setDESCRIPCION(rs.getString("DESCRIPCION"));
                objeto.setACRONIMO(rs.getString("ACRONIMO"));
                objeto.setTIPO_DE_CAMBIO_VENTA(rs.getDouble("TIPO_DE_CAMBIO_VENTA"));
                objeto.setMONEDA_BASE(rs.getDouble("MONEDA_BASE"));
                objeto.setTIPO_DE_CAMBIO_COMPRA(rs.getDouble("TIPO_DE_CAMBIO_COMPRA"));
                objeto.setTIPO_DE_CAMBIO(rs.getDouble("TIPO_DE_CAMBIO"));
                objeto.setCon(con);
                lista.add(objeto);
            }
            return lista;
        }
        catch(SQLException ex){
            ex.printStackTrace();
            return null;}
    }
    
    public double getID(){
        return ID;
    }
    public void setID(double ID){
        this.ID=ID;
    }
    
    public String getDESCRIPCION(){
        return DESCRIPCION;
    }
    public void setDESCRIPCION(String DESCRIPCION){
        this.DESCRIPCION=DESCRIPCION;
    }
    
    public String getACRONIMO(){
        return ACRONIMO;
    }
    public void setACRONIMO(String ACRONIMO){
        this.ACRONIMO=ACRONIMO;
    }
    
    public double getTIPO_DE_CAMBIO_VENTA(){
        return TIPO_DE_CAMBIO_VENTA;
    }
    public void setTIPO_DE_CAMBIO_VENTA(double TIPO_DE_CAMBIO_VENTA){
        this.TIPO_DE_CAMBIO_VENTA=TIPO_DE_CAMBIO_VENTA;
    }
    
    public double getTIPO_DE_CAMBIO_COMPRA(){
        return TIPO_DE_CAMBIO_COMPRA;
    }
    public void setTIPO_DE_CAMBIO_COMPRA(double TIPO_DE_CAMBIO_COMPRA){
        this.TIPO_DE_CAMBIO_COMPRA=TIPO_DE_CAMBIO_COMPRA;
    }
    
    public double getTIPO_DE_CAMBIO(){
        return TIPO_DE_CAMBIO;
    }
    public void setTIPO_DE_CAMBIO(double TIPO_DE_CAMBIO){
        this.TIPO_DE_CAMBIO=TIPO_DE_CAMBIO;
    }
    
    public Conexion getCon() {
        return con;
    }
    public void setCon(Conexion con) {
        this.con = con;
    }

    public double getMONEDA_BASE() {
        return MONEDA_BASE;
    }

    public void setMONEDA_BASE(double MONEDA_BASE) {
        this.MONEDA_BASE = MONEDA_BASE;
    }
    
    
    
}
